// 路由鉴权,
import router from "@/router";
import nprogress from "nprogress";
import setting from "./setting";

nprogress.configure({ showSpinner: false });
// 获取用户相关的小仓库内部token数据,去判断用户是否登录成功
import useUserStore from "./store/modules/user";
import pinia from "./store";
const userStore = useUserStore(pinia);

console.log(userStore.token);

// 全局前置守卫
router.beforeEach(async (to, from, next) => {
  document.title = `${setting.title} - ${to.meta.title}`;
  // to:你将要访问的那个路由对象
  // from:你从那个路由而来
  // next:路由的放行函数
  // 访问某一个路由之前的守卫
  nprogress.start();
  // 获取token 去判断用户登录,还是未登录
  const token = userStore.token;
  // 获取用户名字
  const username = userStore.username;

  // 用户登录判断
  if (token) {
    // 登录成功,访问login,不能访问,指向首页
    if (to.path == "/login") {
      next({ path: "/" });
    } else {
      // 登录成功访问其他的
      next();
      // 有用户信息
      if (username) {
        next();
      } else {
        // 如果没有用户信息,在守卫这里发请求获取到用户信息再放行
        try {
          // 获取用户信息
          await userStore.userInfo();
          // 放行
          next();
        } catch (error) {
          // token 过期,获取不到用户信息
          // 用户手动修改本地存储token
          // 退出登录->用户相关的数据清空
          await userStore.userLogout();
          next({ path: "/login", query: { redirect: to.path } });
        }
      }
    }
  } else {
    // 用户未登录判断
    if (to.path == "/login") {
      next();
    } else {
      next({ path: "/login", query: { redirect: to.path } });
    }
  }
});

// 全局后置守卫
router.afterEach((to, from) => {
  console.log(to, from);
  nprogress.done();
});

// 用户未登录,可以访问login,其余路由不能访问(指向login)
// 用户登录成功,不可以访问login 指向首页,其余组件可以访问
